const express = require('express');
const Captcha = require('../utils/captcha')
const handleDB = require('../db/handleDB')
const jwt = require('jsonwebtoken')
const md5 = require('md5')
const router = express.Router();

//路径后面的冒号是为了获取动态路由，冒号后面的内容可以随便写
router.get('/passport/image_code:zyf', (req, res) => {
    const captchaObj = new Captcha();

    // captcha.text 图片验证码文本
    // captcha.data 图片验证码图片内容信息

    //图片 ，<img src='路径' alt=''/>
    const captcha = captchaObj.getCode();
    req.session['ImageCode'] = captcha.text;
    res.setHeader('Content-Type', 'image/svg+xml');
    res.send(captcha.data)
})
router.post('/passport/register', (req, res) => {
    // 分析完成注册功能需要做哪些事情
    (async function () {
        //获取post参数，判空
        const { username, image_code, password, agree } = req.body
        if (!username || !image_code || !password || !agree) {
            res.send({ errmsg: '缺少必传参数' })
            return;
        }
        //验证用户输入的图片验证码是否正确，不正确就return
        if (image_code.toLowerCase() !== req.session['ImageCode'].toLowerCase()) {
            res.send({ errmsg: '验证码填写错误' })
            console.log(req.session['ImageCode']);
            return
        }
        //查询数据库，看看用户名是不是被注册了
        const result = await handleDB(res, 'info_user', 'find', '数据库查询出错', `username = '${username}'`)
        //如果已经存在，返回用户名已经被注册，并return
        if (result[0]) {
            res.send({ errmsg: '用户名已经被注册' })
        }
        //不存在，就在数据库中新增加一条数据
        const result2 = await handleDB(res, 'info_user', 'insert', '数据库插入数据出错', {
            username,
            password_hash: md5(md5(password)+'%dhfJdqu9r8u9q8wjhda') ,
            nick_name: username,
            // last_login:new Date().toLocaleString()
        })
        //保持用户的登录状态
        req.session['user_id'] = result2.insertId
        //返回注册成功给前端
        res.send({ errno: '0', errmsg: '注册成功' })
    })()
})
router.post('/passport/login', (req,res)=>{
    (async function(){
        // 1、获取post请求
        const {username, password} = req.body
        if(!username || !password){
            res.json({errmsg:'缺少必穿参数'})
            return;
        }
        // 2、查询数据库，验证用户名是不是已经注册了
        const result = await handleDB(res,'info_user','find','数据库查询出错',`username='${username}'`)
        // 3、如果没有注册，返回用户名未注册，return
        if(!result[0]){
            res.send({errmsg:'用户名未注册,登陆失败'})
        }
        // 4、校验密码是不是正确？如果不正确，就return
        if(md5(md5(password)+'%dhfJdqu9r8u9q8wjhda') !== result[0].password_hash){
            res.send({errmsg:'用户名或者密码不正确，登陆失败'})
        }
        // 5、保持用户登录状态
        req.session['user_id'] = result[0].id;
        // 设置最后一次登录时间 last_login字段
        // 本质是在修改字段
        await handleDB(res,'info_user','update','数据库修改出错',`id=${result[0].id}`,{last_login: new Date().toLocaleString('Chinese',{hour12:false})})
        // 6、返回登录成功给前端
        res.send({errno:'0',errmsg:'登录成功'})
    })()
})
router.post('/passport/logout',(req,res)=>{
    delete req.session['user_id'];
    res.send({errmsg:'退出登录成功'})
})

//jwt接口
// router.get('/zyf/test',(req,res)=>{
//     const token = jwt.sign({id:1,username:'zhangsan'},'mdoamdoakmdolkasmda',{expiresIn:60*60*2});
//     res.send({
//         errmsg:'success',
//         err:'0',
//         reason:'登录请求',
//         result:{
//             token
//         }
//     })
// })
module.exports = router